package model

import (
	"gorm.io/gorm"
	"smart-health-platforms/config"
	"time"
)

type Address struct {
	Id        int32          `gorm:"column:id;type:int UNSIGNED;primaryKey;not null;" json:"id"`
	UserId    int32          `gorm:"column:user_id;type:int;default:NULL;" json:"user_id"`
	Address   string         `gorm:"column:address;type:varchar(50);default:NULL;" json:"address"`
	Name      string         `gorm:"column:name;type:char(10);default:NULL;" json:"name"`
	Mobile    string         `gorm:"column:mobile;type:char(11);default:NULL;" json:"mobile"`
	Status    int32          `gorm:"column:status;type:int;comment:1-默认2-普通;default:NULL;" json:"status"` // 1-默认2-普通
	CreatedAt time.Time      `gorm:"column:created_at;type:datetime(3);default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt time.Time      `gorm:"column:updated_at;type:datetime(3);default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (a *Address) TableName() string {
	return "address"
}
func (a *Address) AddAddress() error {
	return config.DB.Create(&a).Error
}
func (a *Address) UpdateAddress() error {

	return config.DB.Where("id = ?", a.Id).Updates(&a).Error
}
func (a *Address) DelAddress() error {
	return config.DB.Where("id = ?", a.Id).Delete(&a).Error
}
func (a *Address) ListAddress() (add []Address, err error) {
	err = config.DB.Where("user_id = ?", a.UserId).Find(&add).Error
	return
}
func (a *Address) AddAddressWithDefault(userId int32) error {
	// 1. 检查该用户是否已有地址（排除已删除的）
	var count int64
	err := config.DB.Model(&Address{}).
		Where("user_id = ?", userId).
		Where("deleted_at IS NULL"). // 排除软删除的地址
		Count(&count).Error
	if err != nil {
		return err
	}
	// 2. 如果是第一条地址，设为默认地址（Status=1）
	if count == 0 {
		a.Status = 1
	} else {
		// 非第一条地址，默认为普通地址（如果未指定状态）
		a.Status = 2
	}
	// 3. 保存地址
	return config.DB.Create(&a).Error
}
